﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados.Mappers;
using Dados;
using System.Xml;
using System.Data;

namespace AcessoDados
{
    public class AcessoCategoria
    {
        #region Atributos

        private const string NOMEXML = "categorias";
        private List<CategoriaChampion> _listaCategoria;

        #endregion

        #region Propriedades

        public List<CategoriaChampion> ListaCategoria
        {
            get { return _listaCategoria; }
        }

        #endregion

        #region Metodos

        #region Carregar Lista Categoria
        /// <summary>
        /// Carrega todas as Categorias
        /// </summary>
        /// <returns>List<CategoriaChampion> com as categorias carregadas</returns>
        public List<CategoriaChampion> CarregarListaCategoria()
        {
            List<CategoriaChampion> retorno = null;
            XmlDocument documentoXml = null;
            CategoriaChampion categoria = null;
            try
            {
                retorno = new List<CategoriaChampion>();
                documentoXml = new XmlDocument();
                string xml = Resource.LerXml(NOMEXML);
                documentoXml.LoadXml(xml);

                int quantidadeNos = documentoXml.ChildNodes.Item(1).ChildNodes.Count;
                for (int contador = 0; contador < quantidadeNos; contador++)
                {
                    categoria = new CategoriaChampion();
                    categoria.Id = Convert.ToInt32(documentoXml.ChildNodes.Item(1).ChildNodes.Item(contador).ChildNodes.Item(0).InnerText);
                    categoria.Nome = documentoXml.ChildNodes.Item(1).ChildNodes.Item(contador).ChildNodes.Item(1).InnerText;
                    retorno.Add(categoria);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                documentoXml = null;
                categoria = null;
            }
            return retorno;
        }

        #endregion

        #region Buscar Nome Categoria
        /// <summary>
        /// Busca o nome da categoria por Id
        /// </summary>
        /// <param name="idCategoria">id da categoria a ser buscada</param>
        /// <returns>string com o nome da categoria</returns>
        public string BuscarNomeCategoria(int idCategoria)
        {
            return this.BuscarNomeCategoria(idCategoria, this.CarregarListaCategoria());
        }

        /// <summary>
        /// Busca o nome da categoria por Id
        /// </summary>
        /// <param name="listaCategoriaCompleta">Lista com todas as categorias existentes</param>
        /// <param name="idCategoria">id da categoria a ser buscada</param>
        /// <returns>string com o nome da categoria</returns>
        /// </summary>
        public string BuscarNomeCategoria(int idCategoria, List<CategoriaChampion> listaCategoriaCompleta)
        {
            string retorno = string.Empty;
            try
            {
                var retornoQuery = (from categ in listaCategoriaCompleta
                                    where categ.Id == idCategoria
                                    select categ.Nome).SingleOrDefault();

                retorno = retornoQuery.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return retorno;
        }
        #endregion

        public void IncluirDadosXml(CategoriaChampion mapperCateg)
        {
            XmlDocument documentoXml = null;

            try
            {
                documentoXml = new XmlDocument();
                string xml = Resource.LerXml(NOMEXML);
                documentoXml.LoadXml(xml);

                //Até aqui tá correto!

                XmlNode noCategoria = documentoXml.CreateElement("CATEGORIA");
                XmlNode noId = documentoXml.CreateElement("ID");
                XmlNode noNome = documentoXml.CreateElement("NOME");

                noId.InnerText = mapperCateg.Id.ToString();
                noNome.InnerText = mapperCateg.Nome;

                noCategoria.AppendChild(noId);
                noCategoria.AppendChild(noNome);

                documentoXml.SelectSingleNode("/CATEGORIAS").AppendChild(noCategoria);

                //Resource.SobreescreveXmlResource(noCategoria.OuterXml);
                //documentoXml.Save(caminho);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                documentoXml = null;
            }
        }

        public void AlterarDadosXml(CategoriaChampion mapperCategoria)
        {
            XmlDocument documentoXml = null;
            try
            {
                documentoXml = new XmlDocument();
                string xml = Resource.LerXml(NOMEXML);
                documentoXml.LoadXml(xml);


                XmlNode no;
                no = documentoXml.SelectSingleNode(String.Format("/CATEGORIAS/CATEGORIA[ID={0}]", mapperCategoria.Id));
                no.SelectSingleNode("./NOME").InnerText = mapperCategoria.Nome;



                //documentoXml.Save(@"C:\Kaue\Teste\categorias.xml");


            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {

            }
        }

        public void ExcluirDadosXml(CategoriaChampion mapperCategoria)
        {
            XmlDocument documentoXml = null;
            try
            {
                documentoXml = new XmlDocument();
                string xml = Resource.LerXml(NOMEXML);
                documentoXml.LoadXml(xml);

                foreach (XmlNode no in documentoXml.DocumentElement.ChildNodes)
                {
                    if (int.Parse(no.ChildNodes.Item(0).InnerText) == mapperCategoria.Id)
                    {
                        documentoXml.DocumentElement.RemoveChild(no);
                        documentoXml.Save(@"C:\Kaue\Teste\categorias.xml");
                        return;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {

            }
        }

        #endregion
    }
}